It is known that the amount of dynamic content on information systems such as the Internet or World Wide Web (WWW or the “web”) is increasing at a rapid pace. Web sites typically deploy databases for generating dynamic content. Requests come into a front end and are routed to one or more back-end databases. The overhead for satisfying requests from back-end databases can be high. High-performance web sites typically have multiple back-end databases. However, a problem exists regarding how to route requests (including balancing the request load) to multiple back-end databases, as well as other back end-systems such as messaging/transaction systems, server programs for creating data on-the-fly, etc.
Existing web servers have limited support in performance improvement and Quality-of-Service (QoS) provisioning to access the back-end systems. For example, existing techniques include connection pooling and (possible) server pooling. Connection pooling maintains open connections to the back-end systems and schedules queries in the pooled connections. As a result, the connection overhead in the web applications is reduced. However, this technique has no mechanisms to support load balancing and QoS provisioning.
Moreover, it is difficult to make the web servers unaware of the back-end system configurations without changing the existing applications. Existing protocols, such as the Java Data Base Connectivity (JDBC) protocol, that enable web servers to communicate with the back-end systems typically accept only one system as a data source. Thus, the web server is statically configured to use one back-end system. When configurations such as the server capacity and QoS policy of the back-end systems change, appropriate changes must be made to the web applications to reflect such changes.
Thus, a need exists for techniques which overcome the above-mentioned and other limitations associated with existing load balancing and QoS routing approaches.